//
//  TLColorViewController.swift
//  TLiOS26LiquidGlassDemo
//
//  Created by jiayin on 2025/9/17.
//

import UIKit

/**
 * 一、介绍
 * 随着 iOS 26 的发布，Apple 为开发者带来了对 HDR（高动态范围）颜色的原生支持。本文将带你快速了解 UIColor 在 iOS 26 中的新特性，并结合实际代码示例，介绍如何在项目中适配和使用这些功能。
 *
 * 二、UIColor新增HDR颜色支持
 *  在 iOS 26 之前，UIColor 只能表示 SDR（标准动态范围）颜色。如今，系统新增了曝光值（Exposure / Linear Exposure）的支持，可以更好地展现 HDR 效果。
 *
 * 三、UIColorWell新增HDR支持
 *  UIColorWell 是系统提供的颜色选择控件。在 iOS 26 中，它同样支持 HDR 颜色。
 *
 * 四、UIColorPickerViewController新增HDR支持
 *  UIColorPickerViewController 在 iOS 26 中也升级了，支持 HDR 颜色选择，新增属性与 UIColorWell 一致。
 *
 */
class TLColorViewController: UIViewController {
    lazy var colorWell: UIColorWell = {
        let colorWell = UIColorWell()
        colorWell.title = "设置背景色"
        // iOS26新增
        colorWell.maximumLinearExposure = 2.0
        // iOS26新增，是否支持吸取颜色
        colorWell.supportsEyedropper = false
        colorWell.addTarget(self, action: #selector(valueChanged), for: .valueChanged)
        colorWell.sizeToFit()
        colorWell.center = view.center
        return colorWell
    }()
    lazy var colorPickerViewController: UIColorPickerViewController = {
        var colorPickerViewController = UIColorPickerViewController()
        colorPickerViewController.title = "颜色选择器"
        colorPickerViewController.delegate = self
        // iOS26新增
        colorPickerViewController.maximumLinearExposure = 2.0
        // iOS26新增
        colorPickerViewController.supportsEyedropper = false
        return colorPickerViewController
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 添加HDR测试按钮
        addHDRTestButton()
        
        addColorWellHDRTestButton()
    }
}

extension TLColorViewController {
    // MARK: - 添加HDR测试按钮
    private func addHDRTestButton() {
        // 创建按钮
        let button = UIButton(type: .system)
        button.setTitle("测试HDR颜色", for: .normal)
        button.setTitleColor(.systemBlue, for: .normal)
        button.backgroundColor = .white
        button.layer.cornerRadius = 8
        button.layer.borderWidth = 1
        button.layer.borderColor = UIColor.systemBlue.cgColor
        
        // 设置按钮位置和大小
        button.frame = CGRect(x: 100, y: 130, width: 200, height: 50)
        
        // 添加点击事件
        button.addTarget(self, action: #selector(handleHDRButtonTap), for: .touchUpInside)
        
        // 添加到视图
        view.addSubview(button)
    }
    
    // MARK: - 按钮点击事件
    @objc private func handleHDRButtonTap() {
        testHDRColor()
    }
    
    // MARK: - 测试方法
    func testHDRColor() -> Void {
        // iOS26新增
        let hdrColor = UIColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0, exposure: 2.5)
        // let hdrColor = UIColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0, linearExposure: 2.5)
        view.backgroundColor = hdrColor
    }
}

extension TLColorViewController {
    // MARK: - 添加UIColorWell新增HDR测试按钮
    private func addColorWellHDRTestButton() {
        // 设置按钮位置和大小
        colorWell.frame = CGRect(x: 100, y: 200, width: 200, height: 50)
        
        view.addSubview(colorWell)
    }
    
    @objc func valueChanged(_ sender: UIColor) {
        view.backgroundColor = colorWell.selectedColor
    }
}

extension TLColorViewController: UIColorPickerViewControllerDelegate {
    
    // MARK: - UIColorPickerViewController新增HDR支持
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        present(colorPickerViewController, animated: true, completion: nil)
    }
    
    func colorPickerViewControllerDidSelectColor(_ viewController: UIColorPickerViewController) {
        let color = viewController.selectedColor
        view.backgroundColor = color
    }
    
    func colorPickerViewControllerDidFinish(_ viewController: UIColorPickerViewController) {
        dismiss(animated: true, completion: nil)
    }

}

